package dell.day01;

import org.junit.jupiter.api.Test;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class ConnectionTest01 {
    //方式一：
    @Test
    public void testConnection1() throws SQLException {
       //获取driver实现类对象
        Driver driver = new com.mysql.jdbc.Driver();//声明
        //url:http://localhost:8080
        //jdbc:mysql:协议
        //localhost:ip地址
        //3306：默认端口号
        //test：数据库名称
        String url = "jdbc:mysql://localhost:3306/test";
        //将用户名和密码封装在Properties中
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","123456");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }
    //方式二：（对方式一的迭代）
    //方式二没有使用第三方的api,使得程序具有更好的可移植性。
    // 且方式二只是只是在方式一的基础上使用了反射
    @Test
    public void testConnection2() throws Exception {
        //1.获取driver实现类对象（使用反射）
        Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
       Driver driver =(Driver)clazz.newInstance();
       //2.提供要连接的数据库
        String url="jdbc.mysql://localhost:3306/test";
        //3.提供连接需要的用户名和密码
        Properties info=new Properties();
        info.setProperty("user","root");
        info.setProperty("password","123456");
        //4.获取连接
        Connection connection=driver.connect(url,info);
        System.out.println(connection);
    }
    //方式三：（使用DriverManager替换Driver）
    @Test
    public void testConnection3() throws Exception {
        //获取Driver实现类对象
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();
        //提供另外三个连接的基本信息
        String url="jdbc:mysql://localhost:3306/test";
        String user="root";
        String password="123456";
        //注册驱动
        DriverManager.registerDriver(driver);
        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }
    //方式四：可以只是加载驱动，不用显式地注册驱动了
    // 【在方式三的基础上省略了代码】
    @Test
    public void testConnection4() throws Exception {
        //1.提供三个连接的基本信息
        String url="jdbc:mysql://localhost:3306/test";
        String user="root";
        String password="123456";
        //2.加载Driver
         Class.forName("com.mysql.jdbc.Driver");
        //3，获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);

    }
    //方式五（最终版）：将数据库连接需要的4个基本信息声明在配置文件中，
    //通过读取配置文件的方式获取连接
    //好处:1.实现了代码和数据的分离
    //2.当需要修改文件配置信息时，可以避免重新打包程序
    @Test
    public void getConnection5() throws Exception {
        //1.读取配置文件中的4个基本信息
//        InputStream is = Conne    ctionTest01.class.getClassLoader().getResourceAsStream("jdbc.properties");
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");

        System.out.println(is);
        Properties pros = new Properties();
        pros.load(is);
         String user=pros.getProperty("user");
         String password=pros.getProperty("password");
         String url=pros.getProperty("url");
         String driverClass=pros.getProperty("driverClass");
         //2.加载驱动
        Class.forName(driverClass);
        //3.获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);

    }

}
